#include "pwm.h"

void pwm_init(uint16_t freq)
{
    ledc_timer_config_t ledc_timer;                 /* LEDC定时器句柄 */
    ledc_channel_config_t ledc_channel;             /* LEDC通道配置句柄 */

    /* 配置LEDC定时器 */
    ledc_timer.duty_resolution = LEDC_TIMER_12_BIT;        /* PWM占空比分辨率，12位 */
    ledc_timer.freq_hz = freq;                      /* PWM信号频率 */
    ledc_timer.speed_mode = LEDC_LOW_SPEED_MODE;    /* 定时器模式 */
    ledc_timer.timer_num = LEDC_TIMER_3;          /* 定时器序号 */
    ledc_timer.clk_cfg = LEDC_AUTO_CLK;             /* LEDC时钟源 */
    ledc_timer_config(&ledc_timer);                 /* 配置定时器 */

    /* 配置LEDC通道 */
    ledc_channel.gpio_num = GPIO_NUM_8;      /* LED控制器通道对应引脚 */
    ledc_channel.speed_mode = LEDC_LOW_SPEED_MODE;  /* LEDC高速模式 */
    ledc_channel.channel = LEDC_CHANNEL_1;    /* LEDC控制器通道号 */
    ledc_channel.intr_type = LEDC_INTR_DISABLE;     /* LEDC失能中断 */
    ledc_channel.timer_sel = LEDC_TIMER_3;        /* 定时器序号 */
    ledc_channel.duty = 0;                          /* 占空比值 */
    ledc_channel_config(&ledc_channel);             /* 配置LEDC通道 */

    ledc_channel.channel = LEDC_CHANNEL_2;    /* LEDC控制器通道号 */
    ledc_channel.gpio_num = GPIO_NUM_3;      /* LED控制器通道对应引脚 */
    ledc_channel_config(&ledc_channel);             /* 配置LEDC通道 */
}

void pwm2_init(uint16_t freq)
{
    ledc_timer_config_t ledc_timer;                 /* LEDC定时器句柄 */
    ledc_channel_config_t ledc_channel;             /* LEDC通道配置句柄 */

    /* 配置LEDC定时器 */
    ledc_timer.duty_resolution = LEDC_TIMER_12_BIT;        /* PWM占空比分辨率 */
    ledc_timer.freq_hz = freq;                      /* PWM信号频率 */
    ledc_timer.speed_mode = LEDC_LOW_SPEED_MODE;    /* 定时器模式 */
    ledc_timer.timer_num = LEDC_TIMER_2;          /* 定时器序号 */
    ledc_timer.clk_cfg = LEDC_AUTO_CLK;             /* LEDC时钟源 */
    ledc_timer_config(&ledc_timer);                 /* 配置定时器 */

    /* 配置LEDC通道 */
    ledc_channel.gpio_num = GPIO_NUM_18;      /* LED控制器通道对应引脚 */
    ledc_channel.speed_mode = LEDC_LOW_SPEED_MODE;  /* LEDC高速模式 */
    ledc_channel.channel = LEDC_CHANNEL_3;    /* LEDC控制器通道号 */
    ledc_channel.intr_type = LEDC_INTR_DISABLE;     /* LEDC失能中断 */
    ledc_channel.timer_sel = LEDC_TIMER_2;        /* 定时器序号 */
    ledc_channel.duty = 0;                          /* 占空比值 */
    ledc_channel_config(&ledc_channel);             /* 配置LEDC通道 */

    ledc_channel.channel = LEDC_CHANNEL_4;    /* LEDC控制器通道号 */
    ledc_channel.gpio_num = GPIO_NUM_17;      /* LED控制器通道对应引脚 */
    ledc_channel_config(&ledc_channel);             /* 配置LEDC通道 */
}


void TIM_SetCompare(pwm_channel_t channel, uint16_t duty)
{
    duty=4095-duty;
    if(channel==0)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);    /* 更新占空比 */
    }
    else if(channel==1)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_1, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_1);    /* 更新占空比 */
    }
    else if(channel==2)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2);    /* 更新占空比 */
    }
    else if(channel==3)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_3, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_3);    /* 更新占空比 */
    }
    else if(channel==4)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_4, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_4);    /* 更新占空比 */
    }
    else if(channel==5)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_5, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_5);    /* 更新占空比 */
    }
    else if(channel==6)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_6, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_6);    /* 更新占空比 */
    }
    else if(channel==7)
    {
        ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_7, duty); /* 设置占空比 */
        ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_7);    /* 更新占空比 */
    }
}

